/*
  * 检测版本升级	js sdk
  * 版本号:是指 manifest.json->基础配置->应用版本名称的值，以2个点号分隔的3组数字，如 1.0.0  2.1.9 等
  * post请求将app版本号发往后端服务器，与服务器上的apk版本号进行比对后，返回最新版本的url下载地址。
  * 需自行完成后端比对代码，只要返回符合下列各式的json即可（附带一个php版后端示例代码)
  * POST 请求数据为 
  * 	{
  * 		version:'数字.数字.数字 形式版本号',
  * 		platform:'android或ios'
  * 	}
  * 存在新apk，返回
  * {
	    code:0
		msg:"ok"
		version:1.2.1//版本号
		url:'http...apk'//url下载地址，如果是ios，此处填写AppStore的地址，如果是安卓市场，则填写对应市场的url地址
		log:''//更新文字说明，支持 \n 换行
		force:1// 是否强制升级，force=1则是强制升级，用户无法关闭升级提示框
	}
	如果不存在新apk，则返回
	{
		code:1,
		msg:"no"
	}
 */	
function check(param={}){
	// 合并默认参数
	param=Object.assign({
		title:"检测到有新版本！",
		content:"请升级app到最新版本！",
		canceltext:"暂不升级",
		oktext:"立即升级"
	},param)
	if(!param.api){
		return false;
	}
	plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
		let platform=plus.os.name.toLocaleLowerCase()
		
		uni.request({
			url: param['api'],
			data: {
				'platform': platform,
				'version': widgetInfo.version
			},
			// header: {
			// 	'content-type': 'application/x-www-form-urlencoded'
			// },
			method: 'POST', 
			dataType: 'json',
			success: (result) => {
				let data = result.data?result.data:null
				if (data && data.code === 0 && data.url) {
					if(platform=='ios'){
						// 如果是ios,则跳转到appstore
						plus.runtime.openURL(result.data.data.url)
						return;
					}
					// android进行如下操作
					uni.showModal({
						title:param.title,
						content:data.log?data.log:param.content,
						showCancel:data.force ? false : true,
						confirmText:param.oktext,
						cancelText:param.canceltext,
						success:res=>{
							if(!res.confirm){
								console.log('取消了升级');
								if(data.force) {
									plus.runtime.quit()
								}
								return
							}
							if (data.shichang === 1) {
								//去应用市场更新
								plus.runtime.openURL(data.shichangurl);
								plus.runtime.restart();
							} else  {
								// 开始下载
								// 创建下载任务
							var dtask = plus.downloader.createDownload(data.url, {filename:"_downloads/"}, 
								function(d, status){
									// 下载完成
									if(status == 200){
										plus.runtime.install(d.filename, {
											force: false
										}, function() {
											//进行重新启动;
											plus.runtime.restart();
										}, (e) => {
											uni.showToast({
												title: '安装升级包失败:'+JSON.stringify(e),
												icon: 'none'
											}) 
										});
									} else {
										this.tui.toast("下载升级包失败，请手动去站点下载安装，错误码: " + status); 
									}
							});
							
							let view = new plus.nativeObj.View("maskView", {
								backgroundColor:"rgba(0,0,0,.6)",
								left:((plus.screen.resolutionWidth/2)-45)+"px",
								bottom: "80px",
								width: "90px",
								height:"30px"
							})
							view.drawText( '开始下载', {}, {size:'12px',color:'#FFFFFF'} );
							view.show()
							dtask.addEventListener("statechanged", (e)=>{
								if(e && e.downloadedSize>0){
									let jindu=((e.downloadedSize/e.totalSize)*100).toFixed(2)
									view.reset();
									view.drawText( '进度:'+jindu+'%', {}, {size:'12px',color:'#FFFFFF'} );
								}
							}, false);
							dtask.start(); 
						}
						}
					})
				}
			},
			fail: (res) => {
				console.log(res)
			}
		})
	});
}
export default {
	check
}